package com.rupecm.web;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.rupecm.recurso.Recurso;
import com.rupecm.recurso.RecursoRN;

@ManagedBean(name = "recursoNovoBean")
@SessionScoped
public class RecursoNovoBean {

	private Recurso recurso = new Recurso();
	private Recurso recursoAux = new Recurso();
	private RecursoRN recursoRN = new RecursoRN();
	private String message;
	private Recurso recursoSelecionado = new Recurso();
	List<SelectItem> recursoLista = new ArrayList<SelectItem>();
	List<SelectItem> perfil = new ArrayList<SelectItem>();
	List<Recurso> dadosRecurso = new ArrayList<Recurso>();
	private int quantidade;
	private boolean recursoAtivo;


	
	public boolean isRecursoAtivo() {
		return recursoAtivo;
	}

	public void setRecursoAtivo(boolean recursoAtivo) {
		this.recursoAtivo = recursoAtivo;
	}

	public int getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public Recurso getRecursoSelecionado() {
		return recursoSelecionado;
	}

	public void setRecursoSelecionado(Recurso recursoSelecionado) {
		this.recursoSelecionado = recursoSelecionado;
	}

	public List<SelectItem> getPerfil() {
		return perfil;
	}

	public void setPerfil(List<SelectItem> perfil) {
		this.perfil = perfil;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public List<SelectItem> getRecursoLista() {
		return recursoLista;
	}

	public void setRecursoLista(List<SelectItem> recursosLista) {
		this.recursoLista = recursosLista;
	}

	public Recurso getRecursoAux() {
		return recursoAux;
	}

	public void setRecursoAux(Recurso recursoAux) {
		this.recursoAux = recursoAux;
	}

	public Recurso getRecurso() {
		return recurso;
	}

	public void setRecurso(Recurso recurso) {
		this.recurso = recurso;
	}

	public List<Recurso> getDadosRecurso() {
		return dadosRecurso;
	}

	public void setDadosRecurso(List<Recurso> dadosRecurso) {
		this.dadosRecurso = dadosRecurso;
	}

	public void cadastrarRecurso() {

		if (!this.recurso.equals(null)) {
			this.message = recursoRN.cadastrarRecurso(this.recurso);
		}

		if (this.message.equals("DUPLICADO")) {
			MessageBean.usuarioCadastroDuplicado();
			this.recurso.setLogin(null);
			this.message = null;
		} else if (this.message.equals("CONEXAO")) {
			MessageBean.usuarioCadastroProblemaGenerico();
			this.message = null;
		} else if (this.message.equals("OK")) {
			MessageBean.usuarioCadastroOk();
			this.refresh();
			FacesContext.getCurrentInstance().getExternalContext()
					.getSessionMap().put("dadosRecursoNovo", recurso);
			this.message = null;
		}
	}

	public void alterarRecurso() {
		
		if (!this.recursoSelecionado.equals(null)) {
			this.message = recursoRN
					.alterarRecursoGerente(this.recursoSelecionado, this.recursoAtivo);
		}

		if (this.message.equals("DUPLICADO")) {
			MessageBean.usuarioAlteradoDuplicado();
			this.recurso.setLogin(null);
			this.message = null;
		} else if (this.message.equals("CONEXAO")) {
			MessageBean.usuarioAlteradoProblemaGenerico();
			this.message = null;
		} else if (this.message.equals("OK")) {
			MessageBean.usuarioAlteradoOk();
			this.refresh();
			this.message = null;
		}
	}

	public void buscaPerfil() {
		this.perfil = recursoRN.listaPerfil();
	}

	public void buscarRecursos() {
		this.recursoLista = recursoRN.listaRecursos();
	}

	public void buscarDadosRecurso() {
		HttpServletRequest req = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();
		HttpServletRequest request = (HttpServletRequest) req;
		HttpSession session = (HttpSession) request.getSession();
		this.recursoAux = (Recurso) session.getAttribute("dadosRecurso");
		//System.out.println("Gerete Logado: "+ recursoAux.getNome());
		this.dadosRecurso = recursoRN.dadosRecurso(recursoAux);
		this.quantidade = this.dadosRecurso.size();
	}

	public void selecionarRecurso() {
		this.perfil = recursoRN.listaPerfil();
	}
	
	public void ativar() {
		recursoRN.ativar(this.recursoSelecionado);
	}

	public void excluirRecurso() {
		this.message = recursoRN.excluirRecurso(this.recursoSelecionado);

		if (this.message.equals("ALOCADO")) {
			//MessageBean.usuarioAlteradoAlocado();
			this.message = null;
		} else if (this.message.equals("CONEXAO")) {
			MessageBean.usuarioAlteradoProblema();
			this.message = null;
		} else if (this.message.equals("OK")) {
			MessageBean.usuarioAlteradoExlcuirOk();
			this.refresh();
			this.message = null;
		}
	}

	public void refresh() {
		FacesContext context = FacesContext.getCurrentInstance();
		Application application = context.getApplication();
		javax.faces.application.ViewHandler viewHandler = application
				.getViewHandler();
		UIViewRoot viewRoot = viewHandler.createView(context, context
				.getViewRoot().getViewId());
		context.setViewRoot(viewRoot);
		context.renderResponse();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dadosRecurso == null) ? 0 : dadosRecurso.hashCode());
		result = prime * result + ((message == null) ? 0 : message.hashCode());
		result = prime * result + ((perfil == null) ? 0 : perfil.hashCode());
		result = prime * result + ((recurso == null) ? 0 : recurso.hashCode());
		result = prime * result
				+ ((recursoAux == null) ? 0 : recursoAux.hashCode());
		result = prime * result
				+ ((recursoLista == null) ? 0 : recursoLista.hashCode());
		result = prime * result
				+ ((recursoRN == null) ? 0 : recursoRN.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		RecursoNovoBean other = (RecursoNovoBean) obj;
		if (dadosRecurso == null) {
			if (other.dadosRecurso != null)
				return false;
		} else if (!dadosRecurso.equals(other.dadosRecurso))
			return false;
		if (message == null) {
			if (other.message != null)
				return false;
		} else if (!message.equals(other.message))
			return false;
		if (perfil == null) {
			if (other.perfil != null)
				return false;
		} else if (!perfil.equals(other.perfil))
			return false;
		if (recurso == null) {
			if (other.recurso != null)
				return false;
		} else if (!recurso.equals(other.recurso))
			return false;
		if (recursoAux == null) {
			if (other.recursoAux != null)
				return false;
		} else if (!recursoAux.equals(other.recursoAux))
			return false;
		if (recursoLista == null) {
			if (other.recursoLista != null)
				return false;
		} else if (!recursoLista.equals(other.recursoLista))
			return false;
		if (recursoRN == null) {
			if (other.recursoRN != null)
				return false;
		} else if (!recursoRN.equals(other.recursoRN))
			return false;
		return true;
	}
}
